import { 
    IsString, 
    IsBoolean, 
    IsOptional, 
    IsArray, 
    MinLength,
    MaxLength,
    IsUrl 
  } from 'class-validator';
  import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
  
  export class CreateAgentDto {
    @ApiProperty({ description: 'Agent名称', example: '数据分析专家' })
    @IsString({ message: 'Agent名称必须是字符串' })
    @MinLength(2, { message: 'Agent名称至少2个字符' })
    @MaxLength(100, { message: 'Agent名称最多100个字符' })
    agentName: string;
  
    @ApiProperty({ description: 'Agent API地址', example: 'https://api.example.com' })
    @IsString({ message: 'Agent地址必须是字符串' })
    @IsUrl({}, { message: '请输入有效的URL地址' })
    agentAddress: string;
  
    @ApiProperty({ description: 'Agent描述', example: '专业的数据分析和处理服务' })
    @IsString({ message: '描述必须是字符串' })
    @MinLength(10, { message: '描述至少10个字符' })
    @MaxLength(500, { message: '描述最多500个字符' })
    description: string;
  
    @ApiProperty({ description: '作者简介', example: '10年数据科学经验' })
    @IsString({ message: '作者简介必须是字符串' })
    @MinLength(5, { message: '作者简介至少5个字符' })
    @MaxLength(200, { message: '作者简介最多200个字符' })
    authorBio: string;
  
    @ApiProperty({ description: 'Agent分类', example: 'data-analysis' })
    @IsString({ message: 'Agent分类必须是字符串' })
    agentClassification: string;
  
    @ApiProperty({ 
      description: '标签数组', 
      example: ['数据分析', 'Python', '机器学习'],
      type: [String] 
    })
    @IsArray({ message: '标签必须是数组' })
    @IsString({ each: true, message: '每个标签都必须是字符串' })
    tags: string[];
  
    @ApiPropertyOptional({ description: '是否私有', default: true })
    @IsOptional()
    @IsBoolean({ message: '私有状态必须是布尔值' })
    isPrivate?: boolean = true;
  
    @ApiPropertyOptional({ description: '自动接受任务', default: true })
    @IsOptional()
    @IsBoolean({ message: '自动接受任务必须是布尔值' })
    autoAcceptJobs?: boolean = true;
  
    @ApiPropertyOptional({ description: '合约类型', default: 'result' })
    @IsOptional()
    @IsString({ message: '合约类型必须是字符串' })
    contractType?: string = 'result';
  
    @ApiProperty({ description: '钱包地址', example: '0x123...' })
    @IsString({ message: '钱包地址必须是字符串' })
    @MinLength(10, { message: '钱包地址格式错误' })
    walletAddress: string;
  }